package com.dc.juc.example._14_threadPool;

import lombok.extern.slf4j.Slf4j;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Description: ScheduledExecutorService  定时任务线程池
 *
 *  创建一个定长线程池，支持定时及周期性任务执行。
 *
 * @author: gdc
 * @date: 2021/8/18
 * @version 1.0
 */
@Slf4j
public class ThreadPool4 {

    public static void main(String[] args){

        // 创建一个定时任务线程池，并设置核心线程数为1
        ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(1);
        for (int i = 0; i < 5; i++) {
            final int idx = i;

            /**
             * 延时设定时间（initialDelay）后执行第一次任务，每隔时间间隔（period）再次执行任务。
             * initialDelay: 首次执行延时时间
             *       period：定时间隔时间
             *         unit：定时间隔时间单位
             *
             */
            threadPool.scheduleAtFixedRate(() -> log.info("execute --> {}", idx),
                    1,
                    3,
                    TimeUnit.SECONDS);
        }
        //threadPool.shutdown();


        // --------------------------------------------------------------------------------

        /**
         * Timer 也是一种定时器工具
         */
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
                           @Override
                           public void run() {
                               log.info("timer run");
                           }
                       },
                    new Date(),
                    5 * 1000L);

        // 终止定时器
        //timer.cancel();


    }
}
